#include <iostream>
#include <mprpcapplication.h>
#include <user.pb.h>
#include "mprpcchannel.h"

int main(int argc, char **argv)
{
    //整个程序启动以后，想使用 mprpc 框架来享受 rpc 服务调用，一定需要先调用框架的初始化函数（只初始化一次）
    MprpcApplication::Init(argc, argv);

    //演示调用远程发布的 rpc 方法 Login
    fixbug::UserServiceRpc_Stub stub(new MprpcChannel());
    fixbug::LoginRequest request;
    // rpc 请求参数
    request.set_name("zhang san");
    request.set_pwd("123456");
    // rpc 响应
    fixbug::LoginResponse response;
    //发起 rpc 方法调用 同步的 rpc 调用过程 MprpcChannel::callmethod
    stub.Login(nullptr, &request, &response, nullptr);  // RpcChannel->RpcChannel::callMEthod 集中来做所有 rpc 方法调用的参数序列化和网络发送

    //一次 rpc 调用完成，读调用的结果
    if(0 == response.result().errcode())
    {
        std::cout << "rpc login response:" << response.success() << std::endl;
    }
    else
    {
        std::cout << "rpc login response error : " << response.result().errmsg() << std::endl;
    }

    //演示调用远程发布的 rpc 方法 Register
    fixbug::RegisterRequest req;
    req.set_id(2000);
    req.set_name("mprpc");
    req.set_pwd("666666");
    fixbug::RegisterResponse rsp;
    //以同步的方式发起 rpc 请求， 等待返回结果
    stub.Register(nullptr, &req, &rsp, nullptr);
    if(0 == rsp.result().errcode())
    {
        std::cout << "rpc register response:" << rsp.success() << std::endl;
    }
    else
    {
        std::cout << "rpc register response error : " << rsp.result().errmsg() << std::endl;
    }


    return 0;
}